package cn.z2huo.productcenter.enums.flag;

import lombok.Getter;
import lombok.RequiredArgsConstructor;

import java.util.Arrays;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * <p>
 *
 * @author z2huo
 */
@Getter
@RequiredArgsConstructor
public enum AuditFlagEnum {

    /**
     * <p>新建时为起草状态
     * <ul>
         <li>此时还未提交</li>
         <li>起草状态多次修改仍为起草</li>
         <li></li>
     </ul>
     */
    NEW("00", "起草"),

    /**
     * <p>起草完成，提交出去之后变更为待审核状态
     */
    AUDITING("01", "待审核"),

    /**
     * <p>打回之后，修改保存后变更为修改状态
     */
    MODIFY("02", "修改"),

    /**
     * <p>打回给起草人，起草人修改保存后，提交出去后变为修改待审核状态
     */
    AUDITING_AFTER_MODIFY("03", "修改后待审核"),

    /**
     * <p>打回起草人后变更为待会状态
     */
    RETURN("04", "打回"),

    /**
     * <p>打回给起草人，起草人修改保存并再次提交出去后，再次打回，变更为修改后打回状态
     */
    RETURN_AFTER_MODIFY("05", "修改后打回"),

    /**
     * <p>打回给起草人后，起草人舍弃，决定办结，变更为中途办结状态
     */
    GIVE_UP("87", "中途办结"),

    /**
     * <p>审核通过，决定不再执行任何操作（修改等），可以变更为办结状态
     */
    FINISH("88", "办结"),

    /**
     * <p>审核通过
     */
    PASS_AUDIT("99", "审核通过"),

    ;

    private final String value;

    private final String desc;

    private static final Map<String, AuditFlagEnum> valueMap
            = Arrays.stream(AuditFlagEnum.values()).collect(Collectors.toMap(AuditFlagEnum::getValue, flag -> flag));

    public static AuditFlagEnum fromValue(String value) {
        return valueMap.get(value);
    }

}
